﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using Oracle.DataAccess.Client;
using System.Data;
using System.Configuration;
using System.Data.OracleClient;
using System.IO;
using System.Data.OleDb;
using System.Threading;
using System.Net.NetworkInformation;

namespace DslamPort.Models
{
    public class Dslam_API_Class
    {

        #region set and drop service

        public string set_Mytv_mini(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("atm pvc 2 vpi 0 vci 40");
                Thread.Sleep(600);
                tc.WriteLine("pvid " + vlan + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("igmp enable");
                Thread.Sleep(600);
                tc.WriteLine("igmp fast-leave enable");
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("vlan " + vlan + " " + slot + "/" + port + " untag pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("ip igmp mvlan 99 receive-port " + slot + "/" + port + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(10000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Dịch vụ MyTV đã được thiết lập!";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string drop_Mytv_mini(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("no vlan " + vlan + " " + slot + "/" + port + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("no ip igmp mvlan 99 receive-port " + slot + "/" + port + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(10000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Dịch vụ My TV đã được xóa";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string set_ADSL_mini(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("vlan " + vlan + " " + slot + "/" + port + " untag pvc 1");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("atm pvc 1 vpi 0 vci 32");
                Thread.Sleep(600);
                tc.WriteLine("pppoe-plus enable");
                Thread.Sleep(600);
                tc.WriteLine("port-location format flexible-syntax VNPT");
                Thread.Sleep(600);
                tc.WriteLine("pvid " + vlan);
                Thread.Sleep(600);
                tc.WriteLine("end");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(10000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Dịch vụ ADSL đã được thiết lập";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string set_ADSL_MSAN(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                tc.Login("isadmin", "ANS#150");
                Thread.Sleep(800);
                tc.WriteLine("configure interface port xdsl-line:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + " admin-up");
                Thread.Sleep(800);
                tc.WriteLine("configure xdsl line 1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + " service-profile 4 spectrum-profile 2 admin-up");
                Thread.Sleep(800);
                tc.WriteLine("configure atm pvc 1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:32 aal-encap-type llc-snap");
                Thread.Sleep(800);
                tc.WriteLine("configure bridge port isam:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:32");
                Thread.Sleep(800);
                tc.WriteLine("configure bridge port isam:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:32 vlan-id  " + vlan);
                Thread.Sleep(800);
                tc.WriteLine("configure bridge port isam:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:32 pvid  " + vlan);
                Thread.Sleep(800);
                tc.WriteLine("exit all");
                Thread.Sleep(800);
                tc.WriteLine("save");

                Thread.Sleep(800);
                result = "Dịch vụ ADSL đã được thiết lập";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string set_Mytv_MSAN(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                tc.Login("isadmin", "ANS#150");
                Thread.Sleep(800);
                tc.WriteLine("configure interface port xdsl-line:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + " admin-up");
                Thread.Sleep(800);
                tc.WriteLine("configure xdsl line 1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + " service-profile 92  spectrum-profile 2 admin-up");
                Thread.Sleep(800);
                tc.WriteLine("configure atm pvc 1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:40 aal-encap-type llc-snap");
                Thread.Sleep(800);
                tc.WriteLine("configure bridge port isam:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:40");
                Thread.Sleep(800);
                tc.WriteLine("configure bridge port isam:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:40 vlan-id  " + vlan);
                Thread.Sleep(800);
                tc.WriteLine("configure bridge port isam:1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:40 pvid  " + vlan);
                Thread.Sleep(800);
                tc.WriteLine("configure igmp channel 1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + ":0:40 max-num-group 10");
                Thread.Sleep(800);
                tc.WriteLine("exit all");
                Thread.Sleep(800);
                tc.WriteLine("save");
                Thread.Sleep(800);
                result = "Dịch vụ MYTV đã được thiết lập";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string drop_ADSL_mini(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("pvid 1 pvc 1");
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("no vlan " + vlan + " " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Dịch vụ ADSL đã được xóa";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string drop_ADSL_Ip(string ip, string slot, string port, string vlan)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("undo service-port vlan " + vlan + " adsl 0/" + slot + "/" + port);
                Thread.Sleep(800);
                tc.WriteLine("y");
                Thread.Sleep(1000);
                //if (tc.Read().Replace(" ", "").IndexOf("havebeendeleted:0") >= 0)
                //    return "Dịch vụ ADSL vẫn chưa xóa được, có thể do nhầm Vlan";
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                return "Dịch vụ ADSL đã được xóa";
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        public string set_ADSL_Ip(string ip, string slot, string port, string vlan)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("service-port vlan " + vlan + " adsl 0/" + slot + "/" + port + " vpi 0 vci 32 rx-cttr 7 tx-cttr 7");
                Thread.Sleep(800);
                if (tc.Read().IndexOf("Service virtual port has existed already") >= 0)
                {
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("y");
                    return "Dịch vụ ADSL đã được khai báo";
                }
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                return "Dịch vụ ADSL đã được thiết lập";
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        public string set_Mytv_Ip(string ip, string slot, string port, string vlan)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("service-port vlan " + vlan + " adsl 0/" + slot + "/" + port + " vpi 0 vci 40 rx-cttr 44 tx-cttr 44");
                Thread.Sleep(600);
                if (tc.Read().IndexOf("Service virtual port has existed already") >= 0)
                {
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("y");
                    return "Dịch vụ My TV đã được khai báo";
                }
                tc.WriteLine("btv");
                Thread.Sleep(600);
                tc.WriteLine("igmp user add port 0/" + slot + "/" + port + " adsl 0 40 video 0 40 no-auth");
                Thread.Sleep(600);
                tc.WriteLine("");
                Thread.Sleep(400);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                return "Dịch vụ My TV đã được thiết lập";
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút";
            }
        }
        public string drop_Mytv_Ip(string ip, string slot, string port, string vlan)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("btv");
                Thread.Sleep(400);
                tc.WriteLine("igmp user block port 0/" + slot + "/" + port);
                Thread.Sleep(800);
                tc.WriteLine("y");
                Thread.Sleep(400);
                tc.WriteLine("igmp user delete port 0/" + slot + "/" + port);
                Thread.Sleep(800);
                tc.WriteLine("y");
                Thread.Sleep(400);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("undo service-port vlan " + vlan + " adsl 0/" + slot + "/" + port);
                Thread.Sleep(800);
                //if (tc.Read().IndexOf("can be operated") >= 0)
                //    return "Dịch vụ MyTV vẫn chưa xóa được, có thể do nhầm Vlan";
                tc.WriteLine("y");
                Thread.Sleep(1000);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");

                return "Dịch vụ My TV đã được xóa";
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        #endregion
        #region SNR
        public string SNR_miniDslam(string ip, string slot, string port)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("show adsl line-info " + slot + "/" + port + "");
                Thread.Sleep(600);
                Thread.Sleep(800);
                string s = tc.Read().ToString();
                s = s.Replace(" ", "");
                int k = s.IndexOf("OperaStatus");
                string s1 = s.Substring(k, 16).ToString();
                s1 = s1.Replace("OperaStatus", "Trạng thái: ");
                s1 = s1.Replace(":up", "Đang bật");
                s1 = s1.Replace(":down", "Đang tắt");

                k = s.IndexOf("ATU-CCurrentRate(kbps)");
                int k2 = s.IndexOf("ATU-RCurrentRate(kbps)");
                string s2 = s.Substring(k, k2 - k).ToString();
                s2 = s2.Replace("ATU-CCurrentRate(kbps)", " Băng thông cổng hiện tại ");

                k = s.IndexOf("ATU-RSnrMgn(0.1dB)");
                int k3 = s.IndexOf("ATU-CAttenuation(0.1dB)");
                string s3 = s.Substring(k, k3 - k).ToString();
                s3 = s3.Replace("ATU-RSnrMgn(0.1dB):", " Thông số SNR: ");

                Thread.Sleep(600);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                Thread.Sleep(600);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                s = s1 + ". " + s3;
                //s = s1 + s2 + ", " + s3;
                return s.ToString();
            }
            catch
            {
                return "Bị lỗi chưa được xác định rõ nguyên nhân";
            }
        }


        public string SNR_ipDslam(string ip, string slot, string port)
        {
            string s1;
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(450);
                tc.WriteLine("root");
                Thread.Sleep(450);
                tc.WriteLine("admin");
                Thread.Sleep(450);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(450);
                tc.WriteLine("config");
                Thread.Sleep(450);

                tc.WriteLine("interface adsl 0/" + slot + "");
                Thread.Sleep(450);
                tc.WriteLine("display line operation " + port + "");
                Thread.Sleep(1950);
                s1 = tc.Read().ToString();
                s1 = s1.Replace(" ", "");
                int kt = s1.IndexOf("isnotactive");
                if (kt != -1)
                {
                    Thread.Sleep(450);
                    tc.WriteLine("quit");
                    Thread.Sleep(450);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("quit");
                    s1 = tc.Read().ToString();
                    Thread.Sleep(450);
                    tc.WriteLine("y");
                    return "Modem chưa được bật";

                }
                else
                {
                    Thread.Sleep(450);
                    tc.WriteLine("y");
                    Thread.Sleep(600);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("y");
                    Thread.Sleep(350);
                    s1 = tc.Read().ToString();
                    s1 = s1.Replace(" ", "");
                    string dungluongcong = s1.Substring(s1.IndexOf("Downstreamchannelrate(Kbps)") + 28, s1.IndexOf("Downstreammax.attainablerate(Kbps)") - s1.IndexOf("Downstreamchannelrate(Kbps)") - 28);
                    string dungluongtoida = s1.Substring(s1.IndexOf("Downstreammax.attainablerate(Kbps)") + 35, s1.IndexOf("DownstreamchannelSNRmargin(dB)") - s1.IndexOf("Downstreammax.attainablerate(Kbps)") - 35);
                    string bangthongcong = s1.Substring(s1.IndexOf("DownstreamchannelSNRmargin(dB)") + 31, s1.IndexOf("Downstreaminterleaved") - s1.IndexOf("DownstreamchannelSNRmargin(dB)") - 31);
                    return "Dung lượng tối đa cho phép: " + dungluongtoida + ". Băng thông cổng: " + bangthongcong;
                    //return "Dung lượng cổng: "+dungluongcong+". Dung lượng tối đa cho phép: "+dungluongtoida+". Băng thông cổng: "+bangthongcong;
                }
            }
            catch
            {
                return "Bị lỗi chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút";
            }
        }
        public string SNR_msanDslam(string ip, string slot, string port)
        {
            string s = "";
            string s2 = "";
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                tc.Login("isadmin", "ANS#150");
                Thread.Sleep(800);
                tc.WriteLine("show xdsl operational-data line 1/1/" + (Convert.ToInt32(slot) - 1) + "/" + port + " detail");
                Thread.Sleep(1200);
                s = tc.Read().Replace(" ", "").Replace("\r", "").Replace("\n", "");
                tc.WriteLine("logout");


                if (s.IndexOf("opr-state/tx-rate-ds:up:") > -1)
                {
                    s2 = "Modem đang bật với dung lượng: " + s.Substring(s.IndexOf("opr-state/tx-rate-ds:up:") + 24, s.IndexOf("tx-rate-us") - s.IndexOf("opr-state/tx-rate-ds:up:") - 24);
                }
                if (s.IndexOf("opr-state/tx-rate-ds:down:") > -1)
                {
                    s2 = "Modem đang tắt với dung lượng: " + s.Substring(s.IndexOf("opr-state/tx-rate-ds:down:") + 26, s.IndexOf("tx-rate-us") - s.IndexOf("opr-state/tx-rate-ds:down:") - 26);
                }

                return "Trạng thái: " + s2;
            }
            catch
            {
                return "Bị lỗi chưa được xác định rõ nguyên nhân";
            }


        }
        #endregion
        #region reset Port DSLAM
        public string reset_ipDslam(string ip, string dungluong_ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("interface adsl 0/" + slot + "");
                Thread.Sleep(350);
                tc.WriteLine("deactivate " + port);
                Thread.Sleep(350);
                tc.WriteLine("activate " + port + " profile-index " + dungluong_ip + "");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                result = "Cổng đã cập nhật thông tin thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút";
            }
        }
        public string reset_miniDslam(string ip, string dungluong, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("adsl profile " + dungluong);
                Thread.Sleep(600);
                tc.WriteLine("end");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(1000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Cổng đã cập nhật thông tin thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string reset_msanDslam(string ip, string dungluong_msan, string slot, string port)
        {
            string dungluong;
            switch (dungluong_msan)
            {
                case "DSL4M":
                    dungluong = "40";
                    break;
                case "DSL4M5":
                    dungluong = "118";
                    break;
                case "DSL5M":
                    dungluong = "50";
                    break;
                case "DSL6M":
                    dungluong = "60";
                    break;
                case "DSL7M":
                    dungluong = "70";
                    break;
                //case "DSL8M":
                //    dungluong = "122";
                //    break;
                case "DSL9M":
                    dungluong = "90";
                    break;
                case "DSL10M":
                    dungluong = "100";
                    break;
                case "DSL11M":
                    dungluong = "91";
                    break;
                case "DSL12M":
                    dungluong = "92";
                    break;
                case "DSL13M":
                    dungluong = "93";
                    break;
                case "DSL14M":
                    dungluong = "94";
                    break;
                case "DSL15M":
                    dungluong = "95";
                    break;
                //case "DSL16M":
                //    dungluong = "130";
                //    break;
                //case "DSL17M":
                //    dungluong = "131";
                //    break;
                //case "DSL18M":
                //    dungluong = "132";
                //    break;
                //case "DSL20M":
                //    dungluong = "133";
                //    break;
                //case "DSL22M":
                //    dungluong = "134";
                //    break;
                default:
                    dungluong = "80";
                    break;
            }
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                tc.Login("isadmin", "ANS#150");
                Thread.Sleep(800);
                tc.WriteLine("show equipment slot");
                Thread.Sleep(900);
                tc.WriteLine("configure xdsl line 1/1/" + slot + "/" + port + " service-profile " + dungluong + " spectrum-profile 2 admin-up");
                Thread.Sleep(600);
                tc.WriteLine("exit all");
                Thread.Sleep(600);
                tc.WriteLine("admin software-mngt shub database save");
                Thread.Sleep(600);
                tc.WriteLine("exit all");
                Thread.Sleep(600);
                tc.WriteLine("logout");
                return "Cổng đã cập nhật thông tin thành công";
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        #endregion
        #region lock and unlock port
        public string lock_ipDslam(string ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }

                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("interface adsl 0/" + slot + "");
                Thread.Sleep(350);
                tc.WriteLine("deactivate " + port);
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                result = "Cổng đã khóa thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút";
            }
        }
        public string Unlock_ipDslam(string ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("interface adsl 0/" + slot + "");
                Thread.Sleep(350);
                tc.WriteLine("activate " + port);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                result = "Cổng đã mở thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        public string lock_miniDslam(string ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("shut");
                Thread.Sleep(600);
                tc.WriteLine("end");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(1000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Cổng đã khóa thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string unlock_miniDslam(string ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("no shut");
                Thread.Sleep(600);
                tc.WriteLine("end");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(1000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Cổng đã mở thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        #endregion
        public class Dslam_Obj
        {
            public string Slot { get; set; }
            public string Port { get; set; }
            public string Dung_luong { get; set; }
        }
        #region get Dung luong
        public List<Dslam_Obj> show_Profile_miniDslam(string ip)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                for (int j = 1; j <= 5; j++)
                {
                    tc.WriteLine("show adsl status " + j + "/1-32");
                    Thread.Sleep(650);
                    for (int i = 0; i < 10; i++)
                    {
                        tc.WriteLine("");
                        Thread.Sleep(650);
                    }
                }
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");

                //------------------------
                string s = tc.Read().ToString();
                //s = s.Replace(" ", "");
                s = s.Replace(" ", "").Replace("\r", "").Replace("\n", "");
                List<Dslam_Obj> Dslam_Obj = new List<Dslam_Obj>();
                Dslam_Obj = AllIndexesOf_Mini(s, "LineConfProfile:");
                //------------------------
                return Dslam_Obj;

            }
            catch
            {
                return null;
            }
        }
        public List<Dslam_Obj> AllIndexesOf_Mini(string str, string value)
        {
            List<Dslam_Obj> Dslam_Obj = new List<Dslam_Obj>();
            //int j = 1;
            string s2 = "";
            string slot_str = "";
            string slot = "";
            string port_str = "";
            string port = "";
            int n;
            for (int index = 0; ; index += value.Length)
            {
                index = str.IndexOf(value, index);
                s2 = str.Substring(index + 19, 2);

                if (index > 0)
                {
                    slot_str = str.Substring(index - 5, 2);
                    for (int i = 0; i < slot_str.Length; i++)
                    {
                        if (int.TryParse(slot_str.Substring(i, 1), out n))
                        {
                            slot = slot_str.Substring(i, 1);
                            break;
                        }
                    }

                    port_str = str.Substring(index - 3, 2);
                    if (!int.TryParse(port_str.Substring(0, 1), out n))
                        port = port_str.Substring(1, 1);
                    else
                        port = port_str;
                }
                if (!int.TryParse(s2.Substring(1, 1), out n))
                    s2 = s2.Substring(0, 1);

                if (index == -1)
                    return Dslam_Obj;
                Dslam_Obj.Add(new Dslam_Obj
                {
                    Slot = slot,
                    Port = port,
                    Dung_luong = "DSL" + s2 + "M"
                });
            }
        }

        public List<Dslam_Obj> show_Profile_ipDslam(string ip)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                    return null;
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("display current-configuration section adsl");
                Thread.Sleep(400);
                tc.WriteLine("");
                Thread.Sleep(400);
                for (int i = 0; i < 80; i++)
                {
                    tc.WriteLine(" ");
                    Thread.Sleep(600);
                }

                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");

                ////------------------------
                string s = tc.Read().ToString();
                s = s.Replace(" ", "").Replace("\r", "").Replace("\n", "");
                List<Dslam_Obj> Dslam_Obj = new List<Dslam_Obj>();
                Dslam_Obj = AllIndexesOf_Ip(s, "profile-index", "<adsl-");
                //------------------------
                return Dslam_Obj;

            }
            catch
            {
                return null;
            }
        }
        public List<Dslam_Obj> AllIndexesOf_Ip(string str, string value, string value2)
        {
            List<Dslam_Obj> Dslam_Obj = new List<Dslam_Obj>();
            List<string> indexes_slot = new List<string>();
            string s2 = "";
            string slot = "";
            string port_str = "";
            string port = "";
            int n;
            for (int index2 = 0; ; index2 += value2.Length)
            {
                index2 = str.IndexOf(value2, index2);
                if (index2 == -1)
                    break;
                slot = str.Substring(index2 + 8, 2);
                if (!int.TryParse(slot.Substring(1, 1), out n))
                {
                    slot = slot.Substring(0, 1);
                }
                for (int i = 0; i < 64; i++)
                    indexes_slot.Add(slot);
            }
            int j = 0;
            for (int index = 0; ; index += value.Length)
            {
                index = str.IndexOf(value, index);
                s2 = str.Substring(index + 13, 3);
                if (index > 0)
                {
                    port_str = str.Substring(index - 2, 2);
                    if (!int.TryParse(port_str.Substring(0, 1), out n))
                        port = port_str.Substring(1, 1);
                    else
                        port = port_str;
                }
                if (index == -1)
                    return Dslam_Obj;
                Dslam_Obj.Add(new Dslam_Obj
                {
                    Slot = indexes_slot[j++],
                    Port = port,
                    Dung_luong = s2
                });
            }

        }
        public string show_Profile_ipDslam_one_Port(string ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("display line operation port 0/" + slot + "/" + port);
                Thread.Sleep(350);
                if (tc.Read().IndexOf("is not active") >= 0)
                {
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("y");
                    return result = "Port chưa được active";
                }
                tc.WriteLine("y");
                Thread.Sleep(1000);
                string s = tc.Read().ToString();
                s = s.Replace(" ", "").Replace("\r", "").Replace("\n", "");
                int k = s.IndexOf("ProfileName:");
                int k2 = s.IndexOf(".PRF");
                //string s1 = s.Substring(s.IndexOf("ProfileName:") + 12, s.IndexOf(".PRF") - s.IndexOf("ProfileName:") - 12).ToString();                
                string s2 = s.Substring(s.IndexOf("DownstreamchannelSNRmargin(dB):") + 31, s.IndexOf("Downstreaminterleavedchanneldelay(ms):") - s.IndexOf("DownstreamchannelSNRmargin(dB):") - 31).ToString();
                string s3 = s.Substring(s.IndexOf("UpstreamchannelSNRmargin(dB):") + 29, s.IndexOf("Upstreaminterleavedchanneldelay(ms):") - s.IndexOf("UpstreamchannelSNRmargin(dB):") - 29).ToString();
                string s4 = s.Substring(s.IndexOf("Downstreamchannelrate(Kbps):") + 28, s.IndexOf("Downstreammax.attainablerate(Kbps):") - s.IndexOf("Downstreamchannelrate(Kbps):") - 28).ToString();
                string s5 = s.Substring(s.IndexOf("Upstreamchannelrate(Kbps):") + 26, s.IndexOf("Upstreammax.attainablerate(Kbps)") - s.IndexOf("Upstreamchannelrate(Kbps):") - 26).ToString();
                string s6 = s.Substring(s.IndexOf("Downstreammax.attainablerate(Kbps):") + 35, s.IndexOf("DownstreamchannelSNRmargin(dB)") - s.IndexOf("Downstreammax.attainablerate(Kbps):") - 35).ToString();
                string s7 = s.Substring(s.IndexOf("Upstreammax.attainablerate(Kbps):") + 33, s.IndexOf("UpstreamchannelSNRmargin(dB)") - s.IndexOf("Upstreammax.attainablerate(Kbps):") - 33).ToString();
                //string s6 = s.Substring(s.IndexOf("ATU-RCurrentRate(kbps):") + 23, s.IndexOf("ATU-CPrevTxRate(kbps):") - s.IndexOf("ATU-RCurrentRate(kbps):") - 23).ToString();
                //result = "Line Profile: " + s1 + ".PRF" + ",";
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("interface adsl 0/" + slot + "");
                Thread.Sleep(350);
                tc.WriteLine("display port state " + port);
                Thread.Sleep(350);

                s = tc.Read().ToString();
                s = s.Replace(" ", "");
                k = s.IndexOf("Activat");
                string s1 = s.Substring(k + 9, 4).ToString();
                int n;
                if (!int.TryParse(s1.Substring(0, 1), out n))
                    s1 = s1.Substring(1, 3);
                else
                    s1 = s1.Substring(0, 3);
                result += s1 + ",";

                result += "<table>";
                result += "<tr>";
                result += "<th>Tham số xDSL</th>";
                result += "<th>Chiều Down</th>";
                result += "<th>Chiều Up</th>";
                result += "</tr>";
                result += "<tr>";
                result += "<td>Tốc độ hiện tại(Kbps)</td>";
                result += "<td>" + s4 + "</td>";
                result += "<td>" + s5 + "</td>";
                result += "</tr>";
                result += "<tr>";
                result += "<td>Tốc độ tối đa(Kbps)</td>";
                result += "<td>" + s6 + "</td>";
                result += "<td>" + s7 + "</td>";
                result += "</tr>";
                result += "<tr>";
                result += "<td>Độ dự phòng suy hao(dB)</td>";
                result += "<td>" + s2 + "</td>";
                result += "<td>" + s3 + "</td>";
                result += "</tr>";
                result += "</table>";
                tc.WriteLine("quit");
                Thread.Sleep(700);
                tc.WriteLine("quit");
                Thread.Sleep(700);
                tc.WriteLine("quit");
                Thread.Sleep(700);
                tc.WriteLine("y");
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        public string show_Active_ipDslam_one_Port(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("display service-port port 0/" + slot + "/" + port);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(1000);
                string s = tc.Read().ToString();
                string[] vlan_ = vlan.Split('.');
                if (s.IndexOf(vlan_[0]) > -1)
                    result = "<b><i>Dịch vụ ADSL đã được thiết lập</i></b>";
                if (s.IndexOf(vlan_[1]) > -1)
                    result = "<b><i>Dịch vụ MyTv đã được thiết lập</i></b>";
                if (s.IndexOf(vlan_[1]) > -1 && s.IndexOf(vlan_[0]) > -1)
                    result = "<b><i>Dịch vụ ADSL và My TV đã được thiết lập</i></b>";
                if (s.IndexOf(vlan_[1]) == -1 && s.IndexOf(vlan_[0]) == -1)
                    result = "<b><i>Chưa có dịch vụ nào được thiết lập</i></b>";
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút";
            }
        }
        public string show_Active_miniDslam_one_Port(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                tc.WriteLine("show atm vc " + slot + "/" + port);
                Thread.Sleep(1000);
                string s = tc.Read().ToString();
                string[] vlan_ = vlan.Split('.');
                int check_mytv = 0;
                int check_adsl = 0;
                if (s.IndexOf(vlan_[0]) > -1)
                    check_adsl = 1;
                //result = "<b><i>Dịch vụ ADSL đã được thiết lập</i></b>";
                if (s.IndexOf(vlan_[1]) > -1)
                    check_mytv = 1;
                //result = "<b><i>Dịch vụ MyTv đã được thiết lập</i></b>";
                //if (s.IndexOf(vlan_[1]) > -1 && s.IndexOf(vlan_[0]) > -1)
                //result = "<b><i>Dịch vụ ADSL và My TV đã được thiết lập</i></b>";
                //if (s.IndexOf(vlan_[1]) == -1 && s.IndexOf(vlan_[0]) == -1)
                //    result = "<b><i>Chưa có dịch vụ nào được thiết lập</i></b>";                
                tc.WriteLine("show vlan " + vlan_[1]);
                Thread.Sleep(350);
                s = tc.Read().Replace(" ", "").Replace("\r", "").Replace("\n", "");
                int a = s.IndexOf(slot + "2Egress");
                int b = 0;
                int k = 0;
                while (b < a)
                {
                    b = s.IndexOf("UnTag", k + 1);
                    k += s.IndexOf("UnTag");
                }

                string i = s.Substring(a + slot.Length + 7, b - a - slot.Length - 7);
                string m = "";
                string[] ar = i.Split(',');
                for (int j = 0; j < ar.Length; j++)
                {
                    if (ar[j].IndexOf("-") == -1)
                    {
                        m = ar[j];
                    }
                    else
                    {
                        int l = j;
                        string[] ar2 = ar[j].Split('-');
                        for (int n = Convert.ToInt32(ar2[0]); n < Convert.ToInt32(ar2[1]) + 1; n++)
                            m += "," + n;
                    }
                }
                if (m.IndexOf(',') > -1)
                {
                    for (int j = 0; j < m.Split(',').Length; j++)
                    {
                        if (port == m.Split(',')[j])
                        {
                            check_mytv = 2;
                            break;
                        }
                    }
                }
                if (check_mytv == 2)
                    result = "<b><i>Dịch vụ MyTv đã được thiết lập</i></b>";
                if (check_adsl == 1)
                    result = "<b><i>Dịch vụ ADSL đã được thiết lập</i></b>";
                if (check_adsl == 0 && check_mytv < 2)
                    result = "<b><i>Chưa có dịch vụ nào được thiết lập</i></b>";
                if (check_adsl == 1 && check_mytv == 2)
                    result = "<b><i>Dịch vụ ADSL và My TV đã được thiết lập</i></b>";
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        public string show_Profile_miniDslam_one_Port(string ip, string slot, string port)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("show adsl line-info " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("");
                Thread.Sleep(300);
                string s = tc.Read().ToString();
                s = s.Replace(" ", "").Replace("\r", "").Replace("\n", "");

                int k = s.IndexOf("ProfileName:");
                int k2 = s.IndexOf(".PRF");
                string s1 = s.Substring(s.IndexOf("ProfileName:") + 12, s.IndexOf(".PRF") - s.IndexOf("ProfileName:") - 12).ToString();
                string s2 = s.Substring(s.IndexOf("ATU-CSnrMgn(0.1dB):") + 19, s.IndexOf("ATU-RSnrMgn(0.1dB):") - s.IndexOf("ATU-CSnrMgn(0.1dB):") - 19).ToString();
                string s3 = s.Substring(s.IndexOf("ATU-RSnrMgn(0.1dB):") + 19, s.IndexOf("ATU-CAttenuation(0.1dB):") - s.IndexOf("ATU-RSnrMgn(0.1dB):") - 19).ToString();
                string s4 = s.Substring(s.IndexOf("ATU-CCurrentRate(kbps):") + 23, s.IndexOf("ATU-RCurrentRate(kbps):") - s.IndexOf("ATU-CCurrentRate(kbps):") - 23).ToString();
                string s5 = s.Substring(s.IndexOf("ATU-RCurrentRate(kbps):") + 23, s.IndexOf("ATU-CPrevTxRate(kbps):") - s.IndexOf("ATU-RCurrentRate(kbps):") - 23).ToString();
                string s6 = s.Substring(s.IndexOf("ATU-CAttainRate(kbps):") + 22, s.IndexOf("ATU-RAttainRate(kbps)") - s.IndexOf("ATU-CAttainRate(kbps):") - 22).ToString();
                string s7 = s.Substring(s.IndexOf("ATU-RAttainRate(kbps):") + 22, s.IndexOf("ATU-CInterlvDelay(ms)") - s.IndexOf("ATU-RAttainRate(kbps):") - 22).ToString();
                //string s6 = s.Substring(s.IndexOf("ATU-RCurrentRate(kbps):") + 23, s.IndexOf("ATU-CPrevTxRate(kbps):") - s.IndexOf("ATU-RCurrentRate(kbps):") - 23).ToString();
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y"); Thread.Sleep(600);
                string result = s1 + ",";
                result += "<table>";
                result += "<tr>";
                result += "<th>Tham số xDSL</th>";
                result += "<th>Chiều Down</th>";
                result += "<th>Chiều Up</th>";
                result += "</tr>";
                result += "<tr>";
                result += "<td>Tốc độ hiện tại(kbps)</td>";
                result += "<td>" + s4 + "</td>";
                result += "<td>" + s5 + "</td>";
                result += "</tr>";
                result += "<tr>";
                result += "<td>Tốc độ tối đa(kbps)</td>";
                result += "<td>" + s6 + "</td>";
                result += "<td>" + s7 + "</td>";
                result += "</tr>";
                result += "<tr>";
                result += "<td>Độ dự phòng suy hao(dB)</td>";
                result += "<td>" + s2 + "</td>";
                result += "<td>" + s3 + "</td>";
                result += "</tr>";
                result += "</table>";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        #endregion
        public void writefile(string s)
        {
            string path = @"d:\MyTest.txt";
            using (StreamWriter sw = System.IO.File.CreateText(path))
            {
                sw.WriteLine(s);
            }
        }

        internal static string khaibaomytv(string ip, string slot, string port, string vpi, string vlan)
        {
            try
            {

                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(150);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(150);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(150);

                tc.WriteLine("enable");
                Thread.Sleep(150);
                tc.WriteLine("conf t");
                Thread.Sleep(150);
                tc.WriteLine("interface gpon-onu_1/" + slot + "/" + port + ":" + vpi);
                Thread.Sleep(150);

                Thread.Sleep(150);
                tc.WriteLine("tcont 2 name IPTV profile T2_512K");
                Thread.Sleep(150);
                tc.WriteLine("gemport 2 name IPTV tcont 2");
                Thread.Sleep(150);
                tc.WriteLine("gemport 2 traffic-limit upstream G_IPTV downstream G_HD");
                Thread.Sleep(150);
                tc.WriteLine("service-port 2 vport 2 user-vlan 12 vlan " + vlan); 
                Thread.Sleep(150);//sua lai vlan
                tc.WriteLine("exit"); Thread.Sleep(150);
                tc.WriteLine("igmp mvlan 99 receive-port gpon-onu_1/" + slot + "/" + port + ":" + vpi + " vport 2"); Thread.Sleep(150);
                tc.WriteLine("pon-onu-mng gpon-onu_1/" + slot + "/" + port + ":" + vpi);
                Thread.Sleep(150);
                tc.WriteLine("service 2 gemport 2 vlan 12"); Thread.Sleep(150);
                tc.WriteLine("vlan port eth_0/4 mode tag vlan 12"); Thread.Sleep(150);
                tc.WriteLine("vlan port wifi_0/2 mode tag vlan 12"); Thread.Sleep(150);
                tc.WriteLine("mvlan 12"); Thread.Sleep(150);
                tc.WriteLine("wan 2 ethuni 4 ssid 2 service other mvlan 12"); Thread.Sleep(150);
                tc.WriteLine("dhcp-ip ethuni eth_0/4 from-internet"); Thread.Sleep(150);
                tc.WriteLine("exit"); Thread.Sleep(150);
                tc.WriteLine("exit");
                tc.WriteLine("wr"); Thread.Sleep(3500);
                tc.WriteLine("exit");




                result = "Cổng đã cấp MYTV thành công cho cổng: gpon-onu_1/" + slot + "/" + port + ":" + vpi;
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }

        internal static string khaibaointernet(string user, string pass, string pass2, string ip, string slot, string port, string vpi, string vlan2)
        {
            try
            {

                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(350);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(350);

                tc.WriteLine("enable");
                Thread.Sleep(350);
                tc.WriteLine("conf t");
                Thread.Sleep(350);
                tc.WriteLine("interface gpon-olt_1/" + slot + "/" + port );
                tc.WriteLine("onu "+vpi+" type ZTE-F600W pw "+pass);
                //xoa dich vu
                //tc.WriteLine("interface gpon-olt_1/" + slot + "/" + port);
                //tc.WriteLine("onu " + vpi + " type ZTE-F600W pw " + pass);
                tc.WriteLine("exit");
                tc.WriteLine("interface gpon-onu_1/" + slot + "/" + port + ":" + vpi);
                tc.WriteLine("tcont 1 name HSI profile T4_100M");
                tc.WriteLine("gemport 1 name HSI tcont 1");
                tc.WriteLine("gemport 1 traffic-limit upstream G_10M downstream G_20M");
                tc.WriteLine("service-port 1 vport 1 user-vlan 11 vlan "+vlan2);//vlan internet
                tc.WriteLine("exit ");
                tc.WriteLine("interface gpon-onu_1/" + slot + "/" + port + ":" + vpi);
                tc.WriteLine("port-identification format VNPT vport 1");
                tc.WriteLine("pppoe-intermediate-agent enable vport 1");
                tc.WriteLine("pppoe-intermediate-agent trust true replace vport 1");
                tc.WriteLine("exit");
                tc.WriteLine("gpon");
                tc.WriteLine("onu profile vlan HSI_PPPOE tag-mode tag cvlan 11");
                tc.WriteLine("exit");
                tc.WriteLine("pon-onu-mng gpon-onu_1/" + slot + "/" + port + ":" + vpi);
                tc.WriteLine("service 1 gemport 1 vlan 11");
                tc.WriteLine("wan-ip 1 mode pppoe username " + user + " password "+pass2+" vlan-profile HSI_PPPOE host 1");//pass nay la gi
                tc.WriteLine("wan 1 service internet host 1");
                tc.WriteLine("exit");
                tc.WriteLine("exit");
                tc.WriteLine("write"); Thread.Sleep(3500);
                tc.WriteLine("exit");
                result = "Cổng đã cấp  internet thành công cho cổng: gpon-onu_1/" + slot + "/" + port + ":" + vpi;
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }

        internal static string xoadichvu(string ip, string slot, string port, string vpi)
        {
            try
            {

                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(150);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(150);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(150);

                tc.WriteLine("enable");
                Thread.Sleep(150);
                tc.WriteLine("conf t");
                Thread.Sleep(150);
                //xoa dich vu
                tc.WriteLine("interface gpon-olt_1/" + slot + "/" + port); Thread.Sleep(150);
                tc.WriteLine("no onu " + vpi ); Thread.Sleep(150);
                tc.WriteLine("exit");
                tc.WriteLine("exit");
                tc.WriteLine("wr"); Thread.Sleep(3500);
                tc.WriteLine("exit");



                result = "Cổng đã xóa dịch vụ thành công cho cổng: gpon-onu_1/" + slot + "/" + port + ":" + vpi;
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }
        //namtd 15/06/2016------------------------------------
        public string reset_cong_ipDslam(string ip, string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config");
                Thread.Sleep(400);
                tc.WriteLine("interface adsl 0/" + slot + "");
                Thread.Sleep(350);
                tc.WriteLine("deactivate " + port);
                Thread.Sleep(600);
                tc.WriteLine("activate " + port);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y");
                result = "Cổng đã reset thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        public string reset_cong_miniDslam(string ip,  string slot, string port)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("shut");
                Thread.Sleep(600);
                tc.WriteLine("no shut");
                Thread.Sleep(600);
                tc.WriteLine("end");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(1000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Cổng đã reset thành công";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }

        public string reset_mytv_mini(string ip, string slot, string port, string vlan)
        {
            try
            {
                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("enable");
                Thread.Sleep(600);
                tc.WriteLine("admin");
                Thread.Sleep(600);
                tc.WriteLine("config");
                Thread.Sleep(600);
                tc.WriteLine("no vlan " + vlan + " " + slot + "/" + port + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("no ip igmp mvlan 99 receive-port " + slot + "/" + port + " pvc 2");
                Thread.Sleep(600);
                ////////////////////////////////////
                tc.WriteLine("interface adsl " + slot + "/" + port);
                Thread.Sleep(600);
                tc.WriteLine("atm pvc 2 vpi 0 vci 40");
                Thread.Sleep(600);
                tc.WriteLine("pvid " + vlan + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("igmp enable");
                Thread.Sleep(600);
                tc.WriteLine("igmp fast-leave enable");
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("vlan " + vlan + " " + slot + "/" + port + " untag pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("ip igmp mvlan 99 receive-port " + slot + "/" + port + " pvc 2");
                Thread.Sleep(600);
                tc.WriteLine("exit");
                Thread.Sleep(600);
                tc.WriteLine("save");
                Thread.Sleep(10000);
                tc.WriteLine("quit");
                Thread.Sleep(600);
                tc.WriteLine("y");
                result = "Dịch vụ My TV đã khởi tạo lại";
                return result;
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân";
            }
        }       
        public string reset_mytv_ip(string ip, string slot, string port, string vlan)
        {
            try
            {
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(350);
                tc.WriteLine("root");
                Thread.Sleep(350);
                tc.WriteLine("admin");
                Thread.Sleep(350);
                if (tc.Read().IndexOf("Reenter times have reached the upper limit") >= 0)
                {
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    tc.WriteLine("");
                    Thread.Sleep(350);
                    return "Không thực hiện thành công do DSLAM đang được truy cập bởi người dùng khác";
                }
                tc.WriteLine("Enable");
                Thread.Sleep(350);
                tc.WriteLine("config"); 
                Thread.Sleep(400);
                tc.WriteLine("btv");
                Thread.Sleep(400);
                tc.WriteLine("igmp user block port 0/" + slot + "/" + port);
                Thread.Sleep(800);
                tc.WriteLine("y");
                Thread.Sleep(400);
                tc.WriteLine("igmp user delete port 0/" + slot + "/" + port);
                Thread.Sleep(800);
                tc.WriteLine("y");
                Thread.Sleep(400);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("undo service-port vlan " + vlan + " adsl 0/" + slot + "/" + port);
                Thread.Sleep(800);
                //if (tc.Read().IndexOf("can be operated") >= 0)
                //    return "Dịch vụ MyTV vẫn chưa xóa được, có thể do nhầm Vlan";
                tc.WriteLine("y");
                Thread.Sleep(1000);
                ///////////////////////////////                
                tc.WriteLine("service-port vlan " + vlan + " adsl 0/" + slot + "/" + port + " vpi 0 vci 40 rx-cttr 44 tx-cttr 44");
                Thread.Sleep(600); 
                if (tc.Read().IndexOf("Service virtual port has existed already") >= 0)
                {
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("quit");
                    Thread.Sleep(350);
                    tc.WriteLine("y");
                    return "Dịch vụ My TV đã được khai báo";
                }
                tc.WriteLine("btv");
                Thread.Sleep(600);
                tc.WriteLine("igmp user add port 0/" + slot + "/" + port + " adsl 0 40 video 0 40 no-auth");
                Thread.Sleep(600);
                tc.WriteLine("");
                Thread.Sleep(400);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("quit");
                Thread.Sleep(350);
                tc.WriteLine("y"); 
                ////////////////////////////               

                return "Dịch vụ My TV đã được khởi tạo lại";
            }
            catch
            {
                return "Bị lỗi cập nhật chưa được xác định rõ nguyên nhân. Truy cập lại sau vài phút!";
            }
        }
        //------------------------------------------
        internal static string kiemtragpon(string ip)
        {

            try
            {

                string result = "";
                TelnetConnection tc = new TelnetConnection(ip, 23);
                Thread.Sleep(150);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(150);
                tc.WriteLine("tinhocdb123");
                Thread.Sleep(150);


                //xoa dich vu
                tc.WriteLine("show gpon  onu uncfg"); Thread.Sleep(300);
                string s = tc.Read().ToString();
                int k2 = s.IndexOf("gpon-onu");
                if (k2 == -1)
                {
                    return "Không có cổng nào chưa cấu hình";
                }
               // s = s.Substring(k2 , 37);
                List<string> ketqua = new List<string>();

                string kq = "";
                int count = 0;
                int idx = 0;
                while ((idx = s.IndexOf("gpon-onu", idx)) != -1)
                {
                    idx++;
                    count++;
                   kq+=s.Substring(idx, 37)+"<br>";
                }
                tc.WriteLine("exit");
                tc.WriteLine("exit");
                
                tc.WriteLine("exit");



                result = "<b>Có " + count + " Cổng chưa cấu hình: </b><br><br>" + kq;
                return result;
            }
            catch
            {
                return "Bị lỗi chưa được xác định rõ nguyên nhân";
            }
        }
        public static string ping(string ip)
        { 
            string lblStatus = "";
            try
            {
               
                Ping ping = new Ping();

                for (int q = 0; q < 3; q++)
                {
                    PingReply pingreply = ping.Send(ip);

                    String PingStatus = pingreply.Status.ToString();
                    switch (PingStatus)
                    {

                        case "Success":
                            lblStatus += "Reply from:  " + Convert.ToString(pingreply.Address) + "     \r";
                            lblStatus += "Bytes:  " + Convert.ToString(pingreply.Buffer.Length.ToString()) + "     \r ";
                            lblStatus += "Time:  " + Convert.ToString(pingreply.RoundtripTime) + "     \r";
                            lblStatus += "TTL:  " + Convert.ToString(pingreply.Options.Ttl) + "        \r <br>";
                           
                            break;

                        case "TimedOut":
                            lblStatus += "Request timed out.<br>";
                          
                            break;

                        case "DestinationHostUnreachable":
                            lblStatus += "Destination Host Unreachable<br>";
                            
                            break;

                        case "DestinationUnreachable":
                            lblStatus += "Ping request could not find host r.red.com. Please check the name and try again.<br>";
                           
                            break;
                        case "BadDestination":
                            lblStatus += "Ping request could not find host r.red.com. Please check the name and try again.<br>";
                          
                            break;



                        default:
                            lblStatus = "SOME Error";
                            break;
                    }
                   

                } return lblStatus;
            }
            catch (Exception err)
            {
                //lblStatus = err.Message;
                return err.Message;
            }
        }
    }
}
